package org.jeecg.modules.websocket;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;

//@Component
@Slf4j
//@ServerEndpoint("/nurse/websocket/{userId}")
public class NurseWebSocket {

//    private Session session;

//    private static CopyOnWriteArraySet<NurseWebSocket> webSockets = new CopyOnWriteArraySet<>();

    private static Map<String, Session> sessionPool = new HashMap<String, Session>();

    @OnOpen
    public void onOpen(Session session, @PathParam(value = "userId") String userId) {
        try {
            sessionPool.put(userId, session);
            log.info("【nurse_websocket消息】有新的连接，总数为:" + sessionPool.size());
        } catch (Exception e) {
        }
    }

    @OnClose
    public void onClose(@PathParam("userId") String userId) {
        try {
//            webSockets.add(this);
            sessionPool.remove(userId);
            log.info("【系统 nurse_websocket消息】连接断开，总数为:" + sessionPool.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//    @OnMessage
//    public void onMessage(String message) {
//        log.info("【nurse_websocket消息】收到客户端消息:" + message);
//        try {
//            JSONObject jsonObject = JSON.parseObject(message);
//        } catch (Exception e) {
//            log.error("【nurse_websocket消息】收到客户端消息error:" + e);
//        }
//    }
//
//    public void sendOneMessage(String socketId, String message) {
//        log.info("socketId:{}【nurse_websocket消息】 单点消息{}:", socketId, message);
//        Session session = sessionPool.get(socketId);
//        if (session != null && session.isOpen()) {
//            try {
//                session.getAsyncRemote().sendText(message);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }

    // 此为广播消息
    public void sendAllMessage(String message) {
        log.info("【系统 nurse_websocket消息】群发消息:{} sessionPool:{}", message, sessionPool.size());

        try {
            for (Map.Entry<String, Session> item : sessionPool.entrySet()) {
                try {
//                    if (item.getValue().isOpen()) {
                    item.getValue().getAsyncRemote().sendText(message);
//                    }
                } catch (Exception e) {
                    log.error(e.getMessage(), e);
                }
            }

        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    // 此为单点消息
//    // 此为单点消息(多人)
//    public void sendMoreMessage(String[] userIds, String message) {
//        for (String userId : userIds) {
//            Session session = sessionPool.get(userId);
//            if (session != null && session.isOpen()) {
//                try {
//                    log.info("【websocket消息】 单点消息:" + message);
//                    session.getAsyncRemote().sendText(message);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//
//    }

}
